package Main;

import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import log.ArchivoLog;
import comun.CasillaCorreo;
import comun.Estados;
import comun.Inbox;
import comun.Mensaje;
import comun.OficinaCorreo;
import comun.Prioridades;
import comun.RelacionConfianza;
import comun.Usuario;

import dao.CasillaCorreoDAO;
import dao.InboxDAO;
import dao.MensajeDAO;
import dao.OficinaCorreoDAO;
import dao.RelacionConfianzaDAO;
import dao.UsuarioDAO;

public class Main 
{
	public static void main(String[] args)  
	{
		pruebaTomy();
		pruebaCande();
		//casillaDaoTest();
		//oficinaDaoTest();
		//inboxDaoTest();
		//InboxDaoTest2 () ;
	}
	
	private static void pruebaTomy()
	{			
		Usuario user1 = new Usuario ("Tomas Cereminati" , "tiojorge") ;
		
		OficinaCorreo oficina1 = new OficinaCorreo ("Oficina PERSONALES") ;
		OficinaCorreo oficina2 = new OficinaCorreo ("Oficina FACULTAD") ;
		
		CasillaCorreo casilla1 = new CasillaCorreo ("tcereminati@hotmail.com") ;
		CasillaCorreo casilla2 = new CasillaCorreo ("tomas.cereminati@gmail.com") ;
		CasillaCorreo casilla3 = new CasillaCorreo ("125072@uade.edu.ar") ;
		
		oficina1.agregarCasillaCorreo(casilla1) ;
		oficina1.agregarCasillaCorreo(casilla2) ;
		oficina2.agregarCasillaCorreo(casilla2) ;
		oficina2.agregarCasillaCorreo(casilla3) ;
		
		user1.asignarCasillaCorreo(casilla1) ;
		user1.asignarCasillaCorreo(casilla2) ;
		user1.asignarCasillaCorreo(casilla3) ;
		
		RelacionConfianza relacion1 = new RelacionConfianza (oficina1 , oficina2) ;
		RelacionConfianza relacion2 = new RelacionConfianza (oficina2 , oficina1) ;

		Calendar cal = Calendar.getInstance() ;
		Date fecha1 = new Date (cal.getTime().getTime()) ;
		
		Mensaje mensaje1 = new Mensaje (casilla1 , "Guias Laboratorio" , fecha1 , "No nos olvidemos de hacerlas ..." , "Urgente !" ) ;
		mensaje1.agregarDestinatario(casilla2) ;
		mensaje1.agregarDestinatario(casilla3) ;
		
		Inbox inbox2 = new Inbox (mensaje1 , Estados.LEIDO , casilla2) ;
		Inbox inbox3 = new Inbox (mensaje1 , Estados.ELIMINADO , casilla3) ;
		
		// PRUEBAS HIBERNATE
		
		UsuarioDAO.getInstancia().addUsuario(user1) ;
		MensajeDAO.getInstancia().addMensaje(mensaje1);
		InboxDAO.getInstancia().addInbox(inbox2) ;
		InboxDAO.getInstancia().addInbox(inbox3) ;
		OficinaCorreoDAO.getInstancia().addOficinaCorreo(oficina1) ;
		OficinaCorreoDAO.getInstancia().addOficinaCorreo(oficina2) ;
		RelacionConfianzaDAO.getInstancia().addRelacion(relacion1) ;
		RelacionConfianzaDAO.getInstancia().addRelacion(relacion2) ; 
		
		new ArchivoLog(mensaje1);
		//System.out.println( UsuarioDAO.getInstancia().getUsuarioPorNombre(user1.getNombreUsuario().toString()) ) ;
		//System.out.println( OficinaCorreoDAO.getInstancia().getOficinaPerteneciente(casilla3.getNombreCasilla()).toString() );
	}
	
	private static void pruebaCande()
	{
		Usuario user1 = new Usuario ("Candelas Arroyo" , "123") ;
		Usuario user2 = new Usuario("test", "test");
		
		OficinaCorreo oficina1 = new OficinaCorreo ("Oficina PERSONALES") ;
		OficinaCorreo oficina2 = new OficinaCorreo ("Oficina FACULTAD") ;
		OficinaCorreo oficina3 = new OficinaCorreo("Oficina loca");
		
		CasillaCorreo casilla1 = new CasillaCorreo ("cande89_@hotmail.com") ;
		CasillaCorreo casilla2 = new CasillaCorreo ("candelas.arroyo@gmail.com") ;
		CasillaCorreo casilla3 = new CasillaCorreo ("124483@uade.edu.ar") ;
		
		CasillaCorreo casilla4 = new CasillaCorreo ("test@hotmail.com") ;
		CasillaCorreo casilla5 = new CasillaCorreo ("test@gmail.com") ;
		CasillaCorreo casilla6 = new CasillaCorreo ("test@uade.edu.ar") ;
		
		oficina1.agregarCasillaCorreo(casilla1) ;
		oficina1.agregarCasillaCorreo(casilla2) ;
		oficina2.agregarCasillaCorreo(casilla3) ;
		oficina3.agregarCasillaCorreo(casilla1);
		oficina3.agregarCasillaCorreo(casilla2);
		oficina3.agregarCasillaCorreo(casilla3);
		oficina1.agregarCasillaCorreo(casilla4);
		oficina2.agregarCasillaCorreo(casilla4);
		oficina3.agregarCasillaCorreo(casilla4);
		oficina3.agregarCasillaCorreo(casilla5);
		oficina3.agregarCasillaCorreo(casilla6);
		
		user1.asignarCasillaCorreo(casilla1) ;
		user1.asignarCasillaCorreo(casilla2) ;
		user1.asignarCasillaCorreo(casilla3) ;
		
		user2.asignarCasillaCorreo(casilla4) ;
		user2.asignarCasillaCorreo(casilla5) ;
		user2.asignarCasillaCorreo(casilla6) ;
		
		
		
		RelacionConfianza relacion1 = new RelacionConfianza (oficina1 , oficina2) ;
		RelacionConfianza relacion2 = new RelacionConfianza (oficina2 , oficina1) ;
		
		Date fecha1 = new Date (2010 , 06 , 29) ;
		
		Mensaje mensaje1 = new Mensaje (casilla1 , "Lenguajes Visuales" , fecha1 , "El TP anda como un campeon" , Prioridades.ALTA) ;
		mensaje1.agregarDestinatario(casilla2) ;
		mensaje1.agregarDestinatario(casilla3) ;
		
		//Inbox inbox1 = new Inbox (mensaje1 , Estados.ENVIADO) ;
		
		// PRUEBAS HIBERNATE
		
		UsuarioDAO.getInstancia().addUsuario(user1);
		MensajeDAO.getInstancia().addMensaje(mensaje1);
		UsuarioDAO.getInstancia().addUsuario(user2);
		OficinaCorreoDAO.getInstancia().addOficinaCorreo(oficina1) ;
		OficinaCorreoDAO.getInstancia().addOficinaCorreo(oficina2) ;
		OficinaCorreoDAO.getInstancia().addOficinaCorreo(oficina3) ;

		
		Usuario test = UsuarioDAO.getInstancia().getUsuarioPorNombre("test");
		System.out.print("El nombre es: (buscado por texto) " +test.getNombre());
		
		Usuario candelas = UsuarioDAO.getInstancia().getUsuarioPorNombre(user1.getNombreUsuario());

		pruebaTomy();
		//pruebaCande();
		//casillaDaoTest();
		//oficinaDaoTest();
		//inboxDaoTest();
	}
	

	public static void InboxDaoTest2 ()
	{
		Inbox auxINBOX = InboxDAO.getInstancia().getInboxPorID(1) ;
		System.out.println(auxINBOX.toString());
	}
	
	public static void casillaDaoTest(){
		
		//ArrayList<CasillaCorreo> casillasTest = (ArrayList<CasillaCorreo>) UsuarioDAO.getInstancia().getCasillasUsuario("test");
		List<CasillaCorreo> casillasTest = (List<CasillaCorreo>) UsuarioDAO.getInstancia().getCasillasDelUsuario("Candelas Arroyo");
			
		// recorremos
		for (int i=0; i<casillasTest.size();i++)
			System.out.println(casillasTest.get(i).getNombreCasilla());
	}

	public static void oficinaDaoTest(){
		ArrayList<OficinaCorreo> allOficinasTest = (ArrayList<OficinaCorreo>) OficinaCorreoDAO.getInstancia().getAllOficinas();
		for (int i=0; i<allOficinasTest.size();i++)
			System.out.println("Todas las oficinas: "+allOficinasTest.get(i).getNombreOficina());
		ArrayList<OficinaCorreo> someOficinasTest = (ArrayList<OficinaCorreo>) OficinaCorreoDAO.getInstancia().getAllOficinasCasilla("test@hotmail.com");
		for (int i=0; i<someOficinasTest.size();i++)
			System.out.println("Encontre oficina: "+someOficinasTest.get(i).getNombreOficina());
	}
	
	public static void inboxDaoTest(){
		//List<Inbox> inboxes = CasillaCorreoDAO.getInstancia().getInboxesCasilla("125072@uade.edu.ar");
		List<Inbox> inboxes = CasillaCorreoDAO.getInstancia().getInboxesDeCasilla("test@hotmail.com") ;
		// recorremos
		for (int i=0; i<inboxes.size();i++)
			System.out.println(inboxes.get(i).toString());
	}
	

}
